<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    

<script>

Object.prototype.hehe = '呵呵';
var obj1 = {
    name: '晶哥哥',
    age: 18,
    sex: '男'
}
// 定义对象属性
Object.defineProperty(obj1,'sex',{// 属性描述对象
    configurable: true,// 是否可配置（会影响sex是否可删除、是否可重新修改配置）
    enumerable: false,// 是否可枚举
    writable: true,// 是否可写
    value: '妖'// sex属性的值
});

// Object.keys(obj)返回obj对象自身的所有可枚举属性（数组）
// var res1 = Object.keys(obj1);
// console.log( res1 );// ['name', 'age']

// Object.getOwnPropertyNames(obj)返回obj对象自身的所有属性
// var res2 = Object.getOwnPropertyNames(obj1);
// console.log( res2 );// ['name', 'age', 'sex']

// Object.create(obj,descriptors)返回新创建的对象，并指定该对象的原型对象，设置该对象的属性和描述符
// obj 新创建对象的原型对象，不能为空，可以传null
// descriptors 新创建对象的描述符
var obj2 = Object.create(null);
var obj3 = new Object();
console.log( obj2 );// {没有原型}
console.log( obj3 );// {有原型}

var obj4 = Object.create(obj1,{
    name: {// 描述符对象
        configurable: true,
        enumerable: true,
        writable: true,
        value: '小晶晶'
    },
    age: {// 描述符对象
        configurable: true,
        enumerable: true,
        writable: true,
        value: 12
    },
    sex: {// 描述符对象
        configurable: true,
        enumerable: true,
        writable: true,
        value: '男'
    }
});
// obj4.__proto__ = obj1
// console.log( obj4 );
// console.log( obj4.name );


// Object.getPrototypeOf(obj)返回obj对象的原型对象
// console.log( Object.getPrototypeOf(obj4) );// obj1
// console.log( Object.getPrototypeOf(obj1) );// Object.prototype
// console.log( Object.getPrototypeOf(Object) );// Function.prototype => f(){}
// console.log( Function.prototype.prototype );// undefined
// console.log( Function.prototype.__proto__ );// Object.prototype


// Object.getOwnPropertyDescriptor(obj,property)获取对象自身属性的描述符对象
var desc = Object.getOwnPropertyDescriptor(obj1,'sex');
console.log( desc );// {value: '妖', writable: true, enumerable: false, configurable: true}
console.log( Object.getOwnPropertyDescriptor(obj1,'name') );// {value: '晶哥哥', writable: true, enumerable: true, configurable: true}

</script>
</body>
</html>